package br.com.pfc.application.service;


import br.com.pfc.application.dao.UsuarioDAO;
import br.com.pfc.application.exceptions.BusinessException;
import br.com.pfc.model.Usuario;
import br.com.pfc.util.CriptografiaSHA;
import java.io.Serializable;
import org.apache.commons.lang.StringUtils;
import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;

/**
 *
 * @author ceatis
 */
@AutoCreate
@Name("segurancaUsuarioService")
public class SegurancaUsuarioService implements Serializable{

    @In
    private UsuarioDAO usuarioDAO;

    /**
     * Recupera um usuario pelo id(nome)
     * @param nomeUsuario - nome do usuario a ser recuperado
     * @return SegurancaUsuario - usuario encontrado, null caso contrario
     */
    public Usuario obterPorId(String nomeUsuario) {
        //adicionarLogDebug("Invocando DAO para obter usuario do id #0", nomeUsuario);

        if (StringUtils.isEmpty(nomeUsuario)) {
            return null;
        }
        //TODO MUDAR NOME METODO
        return usuarioDAO.obterPorUsuario(nomeUsuario);
    }

    /**
     * Recupera um Usuario no sistema
     * @param nomeUsuario - nome do usuario a ser recuperado
     * @param senhaCriptografada - senha do usuario
     * @return SegurancaUsuario - usuario encontrado
     */
    public Usuario obterUsuario(String nomeUsuario, String senhaCriptografada) {
        System.out.println("ObterUsuario...");
        return usuarioDAO.obterUsuario(nomeUsuario, senhaCriptografada);
    }

    /**
     * Altera o usuario no BD
     * @param usuario
     */
    public void alterar(Usuario usuario) throws BusinessException {
    //    adicionarLogDebug("Invocando DAO para alterar usuario");

        try {
            usuarioDAO.alterar(usuario);
        } catch (Exception e) {
 //           adicionarLogErro(e);
            throw new BusinessException(e.getMessage(), e);
        }
    }

    /**
     * Verifica se a senha descriptografada informada
     * eh igual a senha
     * @param senhaDescriptografada, senha
     * @return true se as senhas sao iguais e false caso contrario
     */
    public Boolean checarSenha(String senhaDescriptografada, String senha) {
        return CriptografiaSHA.criptografar(senhaDescriptografada).equalsIgnoreCase(senha);
    }
}
